import java.io.*;
import java.util.Date;

/**
 * 序列化和反序列化演示类
 */
public class SerializationDemo {
    // 用于存储序列化对象的文件路径
    private static final String FILE_PATH = "person.ser";
    
    public static void main(String[] args) {
        // 创建一个Person对象
        Person person = new Person("张三", 30, new Date(), "这是敏感信息，不会被序列化");
        
        System.out.println("序列化前的对象：");
        System.out.println(person);
        
        // 序列化对象到文件
        serializeObject(person);
        
        // 从文件反序列化对象
        Person deserializedPerson = deserializeObject();
        
        System.out.println("\n反序列化后的对象：");
        System.out.println(deserializedPerson);
        
        // 验证transient关键字的效果
        System.out.println("\n注意：敏感信息(sensitiveInfo)被transient关键字标记，因此在反序列化后为null");
    }
    
    /**
     * 将对象序列化到文件
     * @param object 要序列化的对象
     */
    public static void serializeObject(Object object) {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_PATH))) {
            oos.writeObject(object);
            System.out.println("\n对象已成功序列化到文件：" + FILE_PATH);
        } catch (IOException e) {
            System.err.println("序列化过程中发生错误：" + e.getMessage());
            e.printStackTrace();
        }
    }
    
    /**
     * 从文件反序列化对象
     * @return 反序列化后的对象
     */
    public static Person deserializeObject() {
        Person person = null;
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_PATH))) {
            person = (Person) ois.readObject();
            System.out.println("对象已成功从文件反序列化：" + FILE_PATH);
        } catch (IOException | ClassNotFoundException e) {
            System.err.println("反序列化过程中发生错误：" + e.getMessage());
            e.printStackTrace();
        }
        return person;
    }
}